package router

// ----------------------------------------------------------------------------
// 文件：upload.go
// 描述：文件上传
// 版本：0.1
// 作者：lg
// 日期：2025-01-18
// 修改：2025-01-18 0.1 lg  新增版本
//
// ----------------------------------------------------------------------------
import (
	"bufio"
	"fmt"
	"io"
	"odm/logger"
	"os"
	"path/filepath"
	"time"

	"github.com/kataras/iris/v12"
)

// uploadFile 上传文件
func uploadFile(ctx iris.Context) {
	// 设置上传文件最大尺寸
	ctx.SetMaxRequestBodySize(config.fileSize * iris.MB)
	// 从请求会话中获取文件
	_, fileHeader, err := ctx.FormFile("file")
	if err != nil {
		logger.Error(err)
		ctx.StopWithError(iris.StatusBadRequest, err)
		return
	}
	// 保存上传文件
	fileName := fmt.Sprintf("bank_%s.cvs", time.Now().Format("20060102150405"))
	dest := filepath.Join(config.filePath, "uploads", fileName)
	size, err := ctx.SaveFormFile(fileHeader, dest)
	if err != nil {
		logger.Error(err)
		ctx.StopWithError(iris.StatusBadRequest, err)
		return
	}
	// 解析csv文件
	csv, err := os.Open(dest)
	if err != nil {
		logger.Error(err)
		ctx.StopWithError(iris.StatusInternalServerError, err)
		return
	}
	defer csv.Close()
	reader := bufio.NewReader(csv)
	bank := new(model.Bank)
	for {
		row, err := reader.ReadString('\n')
		// 遍历至文件末尾
		if err == io.EOF {
			break
		}
		if err != nil {
			logger.Error(err)
			ctx.StopWithError(iris.StatusInternalServerError, err)
			return
		}
		// 解析银行机构数据
		if err := api.ReflectToStruct(row, ",", bank); err != nil {
			logger.Error(err)
			ctx.StopWithError(iris.StatusInternalServerError, err)
			return
		}
		if err := model.SaveBank(bank); err != nil {
			logger.Error(err)
			ctx.StopWithError(iris.StatusInternalServerError, err)
			return
		}
	}
	ctx.Writef("文件上传成功，文件大小:%d", size)
}
